#ifndef __SCNS_MATRIX_H__
#define __SCNS_MATRIX_H__

#include "ScnsConfig.h"

#if defined(SCNS_MATRIX_ENABLE)&&SCNS_MATRIX_ENABLE==1

#include "ScnsYing.h"
#include "ScnsMath.h"

extern void scnsMatrixMult13_33(const float A[1][3],const float B[3][3],float C[1][3]);
extern void scnsMatrixMult32_23(const float A[3][2],const float B[2][3],float C[3][3]);
extern void scnsMatrixMult44_44(const float A[4][4],const float B[4][4],float C[4][4]);
extern void scnsMatrixMult32_22(const float A[3][2],const float B[2][2],float C[3][2]);
extern void scnsMatrixMult64_44(const float A[6][4],const float B[4][4],float C[6][4]);
extern void scnsMatrixMult23_31(const float A[2][3],const float B[3][1],float C[2][1]);
extern void scnsMatrixMult21_11(const float A[2][1],const float B[1][1],float C[2][1]);
extern void scnsMatrixMult43_33(const float A[4][3],const float B[3][3],float C[4][3]);
extern void scnsMatrixMult23_32(const float A[2][3],const float B[3][2],float C[2][2]);
extern void scnsMatrixMult12_21(const float A[1][2],const float B[2][1],float C[1][1]);
extern void scnsMatrixMult43_34(const float A[4][3],const float B[3][4],float C[4][4]);
extern void scnsMatrixMult31_11(const float A[3][1],const float B[1][1],float C[3][1]);
extern void scnsMatrixMult21_12(const float A[2][1],const float B[1][2],float C[2][2]);
extern void scnsMatrixMult44_41(const float A[4][4],const float B[4][1],float C[4][1]);
extern void scnsMatrixMult33_33(const float A[3][3],const float B[3][3],float C[3][3]);
extern void scnsMatrixMult63_33(const float A[6][3],const float B[3][3],float C[6][3]);
extern void scnsMatrixMult34_43(const float A[3][4],const float B[4][3],float C[3][3]);
extern void scnsMatrixMult12_22(const float A[1][2],const float B[2][2],float C[1][2]);
extern void scnsMatrixMult64_41(const float A[6][4],const float B[4][1],float C[6][1]);
extern void scnsMatrixMult53_33(const float A[5][3],const float B[3][3],float C[5][3]);
extern void scnsMatrixMult13_31(const float A[1][3],const float B[3][1],float C[1][1]);
extern void scnsMatrixMult55_55(const float A[5][5],const float B[5][5],float C[5][5]);
extern void scnsMatrixMult36_66(const float A[3][6],const float B[6][6],float C[3][6]);
extern void scnsMatrixMult36_61(const float A[3][6],const float B[6][1],float C[3][1]);
extern void scnsMatrixMult34_44(const float A[3][4],const float B[4][4],float C[3][4]);
extern void scnsMatrixMult66_66(const float A[6][6],const float B[6][6],float C[6][6]);
extern void scnsMatrixMult46_61(const float A[4][6],const float B[6][1],float C[4][1]);
extern void scnsMatrixMult22_21(const float A[2][2],const float B[2][1],float C[2][1]);
extern void scnsMatrixMult43_31(const float A[4][3],const float B[3][1],float C[4][1]);
extern void scnsMatrixMult64_46(const float A[6][4],const float B[4][6],float C[6][6]);
extern void scnsMatrixMult66_61(const float A[6][6],const float B[6][1],float C[6][1]);
extern void scnsMatrixMult53_35(const float A[5][3],const float B[3][5],float C[5][5]);
extern void scnsMatrixMult55_51(const float A[5][5],const float B[5][1],float C[5][1]);
extern void scnsMatrixMult23_33(const float A[2][3],const float B[3][3],float C[2][3]);
extern void scnsMatrixMult35_55(const float A[3][5],const float B[5][5],float C[3][5]);
extern void scnsMatrixMult22_22(const float A[2][2],const float B[2][2],float C[2][2]);
extern void scnsMatrixMult63_36(const float A[6][3],const float B[3][6],float C[6][6]);
extern void scnsMatrixMult33_31(const float A[3][3],const float B[3][1],float C[3][1]);
extern void scnsMatrixMult32_21(const float A[3][2],const float B[2][1],float C[3][1]);
extern void scnsMatrixMult63_31(const float A[6][3],const float B[3][1],float C[6][1]);
extern void scnsMatrixMult46_66(const float A[4][6],const float B[6][6],float C[4][6]);
extern void scnsMatrixMult53_31(const float A[5][3],const float B[3][1],float C[5][1]);
extern void scnsMatrixMult33_32(const float A[3][3],const float B[3][2],float C[3][2]);
extern void scnsMatrixMult31_13(const float A[3][1],const float B[1][3],float C[3][3]);
extern void scnsMatrixMult44_43(const float A[4][4],const float B[4][3],float C[4][3]);
extern void scnsMatrixMult35_51(const float A[3][5],const float B[5][1],float C[3][1]);
extern void scnsMatrixMult35_35t(const float A[3][5],const float B[3][5],float C[3][3]);
extern void scnsMatrixMult22_12t(const float A[2][2],const float B[1][2],float C[2][1]);
extern void scnsMatrixMult46_46t(const float A[4][6],const float B[4][6],float C[4][4]);
extern void scnsMatrixMult33_13t(const float A[3][3],const float B[1][3],float C[3][1]);
extern void scnsMatrixMult44_44t(const float A[4][4],const float B[4][4],float C[4][4]);
extern void scnsMatrixMult66_66t(const float A[6][6],const float B[6][6],float C[6][6]);
extern void scnsMatrixMult36_36t(const float A[3][6],const float B[3][6],float C[3][3]);
extern void scnsMatrixMult55_55t(const float A[5][5],const float B[5][5],float C[5][5]);
extern void scnsMatrixMult12_12t(const float A[1][2],const float B[1][2],float C[1][1]);
extern void scnsMatrixMult33_23t(const float A[3][3],const float B[2][3],float C[3][2]);
extern void scnsMatrixMult66_46t(const float A[6][6],const float B[4][6],float C[6][4]);
extern void scnsMatrixMult34_34t(const float A[3][4],const float B[3][4],float C[3][3]);
extern void scnsMatrixMult13_13t(const float A[1][3],const float B[1][3],float C[1][1]);
extern void scnsMatrixMult22_22t(const float A[2][2],const float B[2][2],float C[2][2]);
extern void scnsMatrixMult33_33t(const float A[3][3],const float B[3][3],float C[3][3]);
extern void scnsMatrixMult55_35t(const float A[5][5],const float B[3][5],float C[5][3]);
extern void scnsMatrixMult66_36t(const float A[6][6],const float B[3][6],float C[6][3]);
extern void scnsMatrixMult23_23t(const float A[2][3],const float B[2][3],float C[2][2]);
extern void scnsMatrixMult44_34t(const float A[4][4],const float B[3][4],float C[4][3]);
extern void scnsMatrixCAdd11(const float B,float C[1][1]);
extern void scnsMatrixCAdd22(const float B,float C[2][2]);
extern void scnsMatrixCAdd33(const float B,float C[3][3]);
extern void scnsMatrixCAdd44(const float B,float C[4][4]);
extern void scnsMatrixUnitization31(const float A[3][1],float C[3][1]);
extern void scnsMatrixUnitization41(const float A[4][1],float C[4][1]);
extern void scnsMatrixAdd44(const float A[4][4],const float B[4][4],float C[4][4]);
extern void scnsMatrixAdd55(const float A[5][5],const float B[5][5],float C[5][5]);
extern void scnsMatrixAdd21(const float A[2][1],const float B[2][1],float C[2][1]);
extern void scnsMatrixAdd31(const float A[3][1],const float B[3][1],float C[3][1]);
extern void scnsMatrixAdd61(const float A[6][1],const float B[6][1],float C[6][1]);
extern void scnsMatrixAdd11(const float A[1][1],const float B[1][1],float C[1][1]);
extern void scnsMatrixAdd51(const float A[5][1],const float B[5][1],float C[5][1]);
extern void scnsMatrixAdd33(const float A[3][3],const float B[3][3],float C[3][3]);
extern void scnsMatrixAdd22(const float A[2][2],const float B[2][2],float C[2][2]);
extern void scnsMatrixAdd66(const float A[6][6],const float B[6][6],float C[6][6]);
extern void scnsMatrixAdd41(const float A[4][1],const float B[4][1],float C[4][1]);
extern void scnsMatrixSub71(const float A[7][1],const float B[7][1],float C[7][1]);
extern void scnsMatrixSub21(const float A[2][1],const float B[2][1],float C[2][1]);
extern void scnsMatrixSub31(const float A[3][1],const float B[3][1],float C[3][1]);
extern void scnsMatrixSub61(const float A[6][1],const float B[6][1],float C[6][1]);
extern void scnsMatrixSub11(const float A[1][1],const float B[1][1],float C[1][1]);
extern void scnsMatrixSub51(const float A[5][1],const float B[5][1],float C[5][1]);
extern void scnsMatrixSub41(const float A[4][1],const float B[4][1],float C[4][1]);
extern void scnsMatrixISub11(const float B[1][1],float C[1][1]);
extern void scnsMatrixISub22(const float B[2][2],float C[2][2]);
extern void scnsMatrixISub33(const float B[3][3],float C[3][3]);
extern void scnsMatrixISub44(const float B[4][4],float C[4][4]);
extern void scnsMatrixISub55(const float B[5][5],float C[5][5]);
extern void scnsMatrixISub66(const float B[6][6],float C[6][6]);
extern void scnsMatrixInverse11(const float B[1][1],float C[1][1]);
extern void scnsMatrixInverse22(const float B[2][2],float C[2][2]);
extern void scnsMatrixInverse33(const float B[3][3],float C[3][3]);
extern void scnsMatrixTranspose44(const float A[4][4],float C[4][4]);
extern void scnsMatrixTranspose12(const float A[1][2],float C[2][1]);
extern void scnsMatrixTranspose34(const float A[3][4],float C[4][3]);
extern void scnsMatrixTranspose11(const float A[1][1],float C[1][1]);
extern void scnsMatrixTranspose33(const float A[3][3],float C[3][3]);
extern void scnsMatrixTranspose22(const float A[2][2],float C[2][2]);
extern uint8 scnsMatrixIsFinite11(const float B[1][1]);
extern uint8 scnsMatrixIsFinite12(const float B[1][2]);
extern uint8 scnsMatrixIsFinite13(const float B[1][3]);
extern uint8 scnsMatrixIsFinite21(const float B[2][1]);
extern uint8 scnsMatrixIsFinite22(const float B[2][2]);
extern uint8 scnsMatrixIsFinite23(const float B[2][3]);
extern uint8 scnsMatrixIsFinite31(const float B[3][1]);
extern uint8 scnsMatrixIsFinite32(const float B[3][2]);
extern uint8 scnsMatrixIsFinite33(const float B[3][3]);
extern uint8 scnsMatrixIsFinite34(const float B[3][4]);
extern uint8 scnsMatrixIsFinite35(const float B[3][5]);
extern uint8 scnsMatrixIsFinite36(const float B[3][6]);
extern uint8 scnsMatrixIsFinite41(const float B[4][1]);
extern uint8 scnsMatrixIsFinite43(const float B[4][3]);
extern uint8 scnsMatrixIsFinite44(const float B[4][4]);
extern uint8 scnsMatrixIsFinite46(const float B[4][6]);
extern uint8 scnsMatrixIsFinite51(const float B[5][1]);
extern uint8 scnsMatrixIsFinite53(const float B[5][3]);
extern uint8 scnsMatrixIsFinite55(const float B[5][5]);
extern uint8 scnsMatrixIsFinite61(const float B[6][1]);
extern uint8 scnsMatrixIsFinite63(const float B[6][3]);
extern uint8 scnsMatrixIsFinite64(const float B[6][4]);
extern uint8 scnsMatrixIsFinite66(const float B[6][6]);
extern uint8 scnsMatrixIsFinite71(const float B[7][1]);
#endif
#endif
